package headfirst.factory.factoryMethod.pizzaStore;

import headfirst.factory.factoryMethod.pizzas.Pizza;

/**
 * Pizza商店====创建者
 *
 * @author lxiaol
 * @date 2021/7/1 14:24
 */
public abstract class PizzaStore {

    /**
     * 订购 Pizza,所有地域订购披萨的流程都一样,所以此处是具体方法,
     * 甚至可定义为final,防止被子类覆盖.
     * 若不一样则改为抽象方法,不同地域自己实现具体订购流程.
     * 调用该方法的时候,并不知道是那个子类在 订购披萨.实现了松耦合
     *
     * @param type
     * @return
     */
    public Pizza orderPizza(String type) {
        Pizza pizza = createPizza(type);
        System.out.println("--- Making a " + pizza.getName() + " ---");
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }

    /**
     * 生产 Pizza,由于不同地域生产出来的pizza有所区别,
     * 所有这个地方是一个抽象类,由子类去自己定义当地的pizza生产风格.
     *
     * @param item
     * @return
     */
    public abstract Pizza createPizza(String item);


}
